﻿
using SanJ.FreeCare.Peis.Configure.Body;
using SanJ.FreeCare.Peis.Configure.BPPulse;
using SanJ.FreeCare.Peis.Configure.Color;
using SanJ.FreeCare.Peis.Configure.ColorUltrasound;
using SanJ.FreeCare.Peis.Configure.ConsultingRoom;
using SanJ.FreeCare.Peis.Configure.DepartmentSurgery;
using SanJ.FreeCare.Peis.Configure.DetailPage;
using SanJ.FreeCare.Peis.Configure.Diagnosis;
using SanJ.FreeCare.Peis.Configure.Disease;
using SanJ.FreeCare.Peis.Configure.ECG;
using SanJ.FreeCare.Peis.Configure.Gynecology;
using SanJ.FreeCare.Peis.Configure.HazardFactor;
using SanJ.FreeCare.Peis.Configure.HazardFactorSpecies;
using SanJ.FreeCare.Peis.Configure.InternalMedicine;
using SanJ.FreeCare.Peis.Configure.Nursestation.RegisterStation;
using SanJ.FreeCare.Peis.Configure.ProductPage;
using SanJ.FreeCare.Peis.Configure.ProjectPage;
using SanJ.FreeCare.Peis.Configure.Radiation;
using SanJ.FreeCare.Peis.Configure.RoomPage;
using SanJ.FreeCare.Peis.Configure.Sight;
using SanJ.FreeCare.Peis.Configure.Specimen;
using SanJ.FreeCare.Peis.Configure.Student;
using SanJ.FreeCare.Peis.Configure.Teacher;
using SanJ.FreeCare.Peis.Configure.TechSpecification;
using SanJ.FreeCare.Peis.Configure.Worker;
using SanJ.FreeCare.Peis.Dto;
using SanJ.FreeCare.ValueSets;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;

namespace SanJ.FreeCare.Peis
{
    public interface IPeisAppService
    {
        #region Detail
        Task<DetailDto> GetDetailAsync(Guid id);


        Task<PagedResultDto<DetailDto>> GetDetailListAsync(GetDetailInput input);

        Task<DetailDto> CreateDetailAsync(DetailCreateDto input);

        Task<DetailDto> UpdateDetailAsync(DetailUpdateDto input);

        Task DeleteDetailAsync(Guid id);
        #endregion
        #region Project
        Task<ProjectDto> GetProjectAsync(Guid id);

        Task<PagedResultDto<ProjectDto>> GetProjectListAsync(GetProjectInput input);

        Task<ProjectDto> CreateProjectAsync(ProjectCreateDto input);

        Task<ProjectDto> UpdateProjectAsync(ProjectUpdateDto input);

        Task DeleteProjectAsync(Guid id);
        #endregion
        #region Product
        Task<ProductDto> GetProductAsync(Guid id);

        Task<PagedResultDto<ProductDto>> GetProductListAsync(GetProductInput input);

        Task<ProductDto> CreateProductAsync(ProductCreateDto input);

        Task<ProductDto> UpdateProductAsync(ProductUpdateDto input);

        Task DeleteProductAsync(Guid id);

        #endregion
        #region Room 科室页面接口
        Task<PagedResultDto<RoomDto>> GetRoomListAsync(GetRoomInput input);
        Task<RoomDto> GetRoomAsync(Guid id);
        Task<RoomDto> CreateRoomAsync(CreateRoomDto input);
        Task<RoomDto> UpdateRoomAsync(UpdateRoomDto input);
        #endregion
        #region Specimen 标本页面接口
        Task<PagedResultDto<SpecimenDto>> GetSpecimenListDto(GetSpecimenInput input);
        Task<SpecimenDto> GetSpecimenAsync(Guid Id);
        Task<SpecimenDto> SpecimenCreateAsync(SpecimenCreateDto specimen);
        Task<SpecimenDto> SpecimenUpdateAsync(SpecimenUpdateDto specimen);
        Task SpecimenDeleteAsync(Guid Id);
        #endregion
        #region HazardFactorSpecies  危害因素接口
        /// <summary>
        /// 危害因素种类
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<PagedResultDto<HazardFactorSpeciesDto>> GetHazardFactorSpeciesListAsync(GetHazardFactorSpeciesInput input);
        Task<HazardFactorSpeciesDto> GetHazardFactorSpeciesAsync(Guid Id);
        Task<HazardFactorSpeciesDto> CreateHazardFactorSpeciesAsync(HazardFactorSpeciesCreateDto Input);
        Task<HazardFactorSpeciesDto> UpdateHazardFactorSpeciesAsync(HazardFactorSpeciesUpdateDto input);
        Task DeleteHazardFactorSpeciesAsync(Guid Id);

        /// <summary>
        /// 危害因素
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<PagedResultDto<HazardFactorDto>> GetHazardFactorListAsync(GetHazardFactorInput input);
        Task<HazardFactorDto> GetHazardFactorAsync(Guid id);
        Task<HazardFactorDto> CreateHazardFactorAsync(HazardFactorCreateDto input);
        Task<HazardFactorDto> UpdateHazardFactorAsync(HazardFactorUpdateDto input);
        Task DeleteHazardFactorAsync(Guid Id);
        #endregion
        #region ValueSets

        Task<ListResultDto<CodeConcept>> GetCodeListAsync(string? systemName);
        Task<CodeSystemDto> CreateCodeSystemAsync(CreateCodeSystemInput input);
        Task<CodeSystemDto> UpdateCodeSystemAsync(UpdateCodeSystemInput input);
        Task DeleteCodeSystemAsync(Guid id);

        #endregion
        #region 技术规范
        Task<PagedResultDto<TechSpecificationDto>> GetTechSpecificationListAsync(GetTechSpecificationInput input);
        Task<TechSpecificationDto> GetTechSpecificationAsync(Guid Id);
        Task<TechSpecificationDto> TechSpecificationCreateAsync(TechSpecificationCreateDto input);
        Task<TechSpecificationDto> TechSpecificationUpdateAsync(TechSpecificationUpdateDto input);
        Task DeleteTechSpecificationAsync(Guid Id);
        #endregion
        #region 护士站分检台
        /// <summary>
        /// 护士站分检台接口
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<ListResultDto<ProjectDto>> GetProjectListForNurseAsync(GetProjectListInput input);
        #endregion
        #region 疾病
        /// <summary>
        /// 疾病接口
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<DiseaseDto> GetDiseaseAsync(Guid id);
        Task<PagedResultDto<DiseaseDto>> GetDiseaseListAsync(GetDiseaseInput input);
        Task<DiseaseDto> UpdateDiseaseAsync(DiseaseUpdateDto input);
        Task<DiseaseDto> CreateDiseaseAsync(DiseaseCreateDto input);
        Task DeleteDiseaseAsync(Guid id);
        #endregion
        #region 小程序接口
        Task<PagedResultDto<StudentDto>> GetStudentListAsync(GetStudentInput input);
        Task<StudentDto> GetStudentAsync(Guid id);
        Task<StudentDto> CreateStudentAsync(StudentCreateDto input);
        Task<StudentDto> UpdateStudentAsync(StudentUpdateDto input);
        Task DeleteStudentAsync(Guid id);


        Task<PagedResultDto<TeacherDto>> GetTeacherListAsync(GetTeacherInput input);
        Task<TeacherDto> GetTeacherAsync(Guid id);
        Task<TeacherDto> CreateTeacherAsync(TeacherCreateDto input);


        Task<PagedResultDto<WorkerDto>> GetWorkerLisAsync(GetWorkerInput input);
        Task<WorkerDto> GetWorkerAsync(Guid id);
        Task<WorkerDto> CreateWorkerAsync(WorkerCreateDto input);


        Task<PagedResultDto<InternalMedicineDto>> GetInternalMedicineListAsync(GetInternalMedicineInput input);
        Task<InternalMedicineDto> GetInternalMedicineAsync(Guid id);
        Task DeleteInternalMedicineAsync(Guid id);
        Task<InternalMedicineDto> CreateInternalMedicineAsync(InternalMedicineCreateDto input);
        Task<InternalMedicineDto> UpdateInternalMedicineAsync(InternalMedicineUpdateDto input);


        Task<PagedResultDto<DepartmentSurgeryDto>> GetDepartmentSurgeryLisAsync(GetDepartmentSugeryInput input);
        Task<DepartmentSurgeryDto> GetDepartmentSurgeryAsync(Guid id);
        Task<DepartmentSurgeryDto> CreateDepartmentSurgeryAsync(DepartmentSurgeryCreatDto input);
        Task<DepartmentSurgeryDto> UpdateDepartmentSurgeryAsync(DepartmentSurgeryUpdateDto input);
        Task DeleteDepartmentSurgeryAsync(Guid id);


        Task<PagedResultDto<SightDto>> GetSightListAsync(GetSightInput input);
        Task<SightDto> GetSightAsync(Guid id);
        Task<SightDto> CreateSightAsync(SightCreateDto input);
        Task<SightDto> UpdateSightAsync(SightUpdateDto input);
        Task DeleteSightAsync(Guid Id);


        Task<PagedResultDto<ColorDto>> GetColorListAsync(GetColorInput input);
        Task<ColorDto> GetColorAsync(Guid id);
        Task<ColorDto> CreateColorAsync(ColorCreateDto color);
        Task<ColorDto> UpdateColorAsync(ColorUpdateDto color);
        Task DeleteColorAsync(Guid Id);

        Task<PagedResultDto<BodyDto>> GetBodyListAsync(GetBodyInput input);
        Task<BodyDto> GetBodyAsync(Guid id);
        Task<BodyDto> UpdateBodyAsync(BodyUpdateDto body);
        Task DeleteBodyAsync(Guid Id);
        Task<BodyDto> CreateBodyAsync(BodyCreateDto body);


        Task<PagedResultDto<BPPulseDto>> GetBPPluseListAsync(GetBPPulseInput input);
        Task<BPPulseDto> GetPPulseAsync(Guid Id);
        Task<BPPulseDto> CreateBPPluseAsync(BPPulseCreateDto input);
        Task<BPPulseDto> UpdateBPPulse(BPPulseUpdateDto update);
        Task DeleteBPPluseAsync(Guid Id);


        Task<PagedResultDto<RadiationDto>> GetRadiationListAsync(RadiationDto input);
        Task<RadiationDto> GetRadiationAsync(Guid id);
        Task<RadiationDto> CreateRadiation(RadiationDto input);
        Task<RadiationDto> UpdateRadiation(RadiationDto input);
        Task DeleteRadiationAsync(Guid Id);


        Task<PagedResultDto<ECGDto>> GetECGListAsync(GetECGInput input);
        Task<ECGDto> GetECGDAsync(Guid Id);
        Task<ECGDto> CreateECGAsync(ECGCreateDto input);
        Task<ECGDto> UpdateECGAsync(ECGUpdateDto input);
        Task DeleteECGAsync(Guid Id);


        Task<PagedResultDto<ColorUltrasoundDto>> GetColorUltrasoundListAsync(GetColorUltrasoundInput input);
        Task<ColorUltrasoundDto> GetColorUltrasoundAsync(Guid Id);
        Task<ColorUltrasoundDto> CreateColorUltrasoundAsync(ColorUltrasoundCreateDto createDto);
        Task<ColorUltrasoundDto> UpdateColorUltrasound(ColorUltrasoundUpdateDto updateDto);
        Task DeleteColorUltrasound(Guid Id);


        Task<PagedResultDto<GynecologyDto>> GetGynecologyListAsync(GetGynecologyInput input);
        Task<GynecologyDto> GetGynecologyAsync(Guid Id);
        Task<GynecologyDto> CreateGynecologyAsync(GynecologyCreateDto input);
        Task<GynecologyDto> UpdateGynecologyAsync(GynecologyUpdateDto input);
        Task DeleteGynecologyAsync(Guid Id);
        #endregion
        #region 诊室接口
        Task<PagedResultDto<ConsultingRoomDto>> GetConsultingRoomListAsync(GetConsultingRoomInput input);
        Task<ConsultingRoomDto> GetConsultingRoomAsync(Guid id);
        Task<ConsultingRoomDto> CreateConsultingRoomAsync(ConsultingRoomCreateDto createDto);
        Task<ConsultingRoomDto> UpdateConsultingRoomAsync(ConsultingRoomUpdateDto updateDto);
        Task DeleteConsultingRoomAsync(Guid id);
        #endregion
        #region 综合诊断
        Task<PagedResultDto<DiagnosisDto>> GetDiagnosisLstAsync(GetDiagnosisInput input);
        Task<DiagnosisDto> GetDiagnosisAsync(Guid Id);
        Task<DiagnosisDto> CreateDiagnosisAsync(DiagnosisCreateDto createDto);
        Task<DiagnosisDto> UpdateDiagnosisAsync(DiagnosisUpdateDto updateDto);
        Task DeleteDiagnosisAsync(Guid Id);
        #endregion


    }
}
